void show_func_prof()
{
	mapping *mpObjInfo;
	string cFile;
	int calls;
	float fSelf, fTotal, fSelfPer, fTotalPer;

	write("Function Profiling...\n");
	write("   self     total             self     total\n");
	write("  seconds  seconds    calls  ms/call  ms/call  name\n");

	foreach (object obj in objects())
	{
		mpObjInfo = function_profile(obj);
		cFile = file_name(obj);

		foreach (mapping mpInfo in mpObjInfo)
		{
			calls = mpInfo["calls"];

			if (calls <= 0)
			{
				continue;
			}

			fSelf = mpInfo["self"] / 1000000.0;
			fTotal = (mpInfo["self"] + mpInfo["children"]) / 1000000.0;
			fSelfPer = 1.0 * mpInfo["self"] / calls;
			fTotalPer = 1.0 * (mpInfo["self"] + mpInfo["children"]) / calls;

			write(sprintf("%9.2f%9.2f%9d%9.2f%9.2f  %s\n",
						fSelf,
						fTotal,
						calls,
						fSelfPer,
						fTotalPer,
						cFile + "->" + mpInfo["name"]));
		}
	}
	write("Done\n");
}
